<?php
/**
 *
+------------------------------------+
| Author: amamatthew                 |
+------------------------------------+
 * 日    期：2017-10-27
 * 版    本：1.0.0
 * 功能说明：Json工具类。
 **/
namespace app\ux;

class Json
{

    /**
     * 判断字符串是否是有效的Json格式
     *
     * @param    [string] $strJson 待测试字符串
     * @return   boolean  测试结果
     */
    public function isValidJson($strJson)
    {
        json_decode($strJson);
        return (json_last_error() === JSON_ERROR_NONE);
    }

    /**
     * 读取文件到字符串
     *
     * @param    [string] $file 文件路径名称
     * @return   [string] 读取结果
     */
    public static function fileToString($file)
    {
        try {
            return file_get_contents($file);
        } catch (\Exception $e) {
            throw new \think\Exception($e->getMessage());
        }
    }

    /**
     * 读取文件到数组
     *
     * @param    [string] $file 文件路径名称
     * @return   [array] 转换数组
     */
    public static function fileToArray($file)
    {
        try {

            // 从文件中读取数据到PHP变量
            // 
            $json_string = file_get_contents($file);

            // 把JSON字符串转成PHP数组
            // 
            return json_decode($json_string, true);
        } catch (\Exception $e) {
            throw new \think\Exception($e->getMessage());
        }
    }

    /**
     * 写数组到文件
     *
     * @param    [string] $file 文件路径名称
     * @param    [array] 待转换数组
     * @return   [void]
     */
    public static function arrayToFile($file, $array)
    {
        try {

            // 把PHP数组转成JSON字符串
            // 
            $json = json_encode($array);

            // 写入文件
            // 
            file_put_contents($file, $json);

        } catch (\Exception $e) {
            throw new \think\Exception($e->getMessage());
        }
    }

    /**
     * 数组生成JSON的时候，汉字不转义为 \u开头的UNICODE数据
     * 
     * 兼容低版本
     * 
     * @param    [array] 待转换数组
     * @return   [string] json字符串
     */
    public static function json_encode_Unescaped($array)
    {
        if (version_compare(PHP_VERSION, '5.4.0', '<')) {

            $str = json_encode($array);
            $str = preg_replace_callback("#\\\u([0-9a-f]{4})#i", function ($matchs) {
                return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
            }, $str);

            return $str;

        } else {
            return json_encode($array, JSON_UNESCAPED_UNICODE);
        }
    }

    /**
     * PHP 生成JSON的时候，保持数值数据类型
     * 
     * @param    [array] 待转换数组
     * @return   [string] json字符串
     */
    public static function json_encode_Numeric($array)
    {
        return json_encode($array, JSON_NUMERIC_CHECK);
    }
}
